import * as fs from 'fs';
import * as path from 'path';

/**
 * 生成组件导出配置
 * @param {string} basePath - 项目的根目录
 * @returns {Record<string, string>} - 包含组件导出配置的对象
 */
function generateExports(basePath: string): Record<string, string> {
    const componentsDir = path.join(basePath, 'src/components');
    try {
        // 读取 components 目录下的所有文件
        const files = fs.readdirSync(componentsDir);
        const exportsConfig: Record<string, string> = {};

        files.forEach(file => {
            if (file.endsWith('.vue')) {
                const componentName = path.basename(file, '.vue');
                // 使用相对路径
                // 自动生成exports配置
                exportsConfig[`./${componentName}`] = `./dist/components/${componentName}.js`;
                
            }
        });

        return exportsConfig;
    } catch (error) {
        console.error('读取 components 目录时出错:', error);
        return {};
    }
}

/**
 * 更新 package.json 中的 exports 字段
 * @param {Record<string, string>} exportsConfig - 包含组件导出配置的对象
 */
function updatePackageJson(exportsConfig: Record<string, string>) {
    const packageJsonPath = path.join(process.cwd(), 'package.json');
    try {
        // 读取 package.json 文件
        const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));

        packageJson.exports = {
            ".": {
                "import": "./dist/index.js"
            },
            ...exportsConfig
        };

        // 写入更新后的 package.json 文件
        fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
        console.log('Exports 配置更新成功。');
    } catch (error) {
        console.error('更新 package.json 时出错:', error);
    }
}

// 生成组件导出配置
const exportsConfig = generateExports(process.cwd());
// 更新 package.json 中的 exports 字段
updatePackageJson(exportsConfig);

